package com.example.controller.validate;

import com.example.pojo.entity.validate.Demo3;
import com.example.pojo.entity.validate.Demo4;
import com.example.pojo.entity.validate.Demo5;
import com.example.pojo.entity.validate.Demo6;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.util.ArrayList;
import java.util.Set;

/**
 * @author LiYuhang
 * @version 0.1
 * @application
 * @Date 2020/9/22 14:47
 */
@RestController
@Slf4j
public class Test3Controller {
    @Autowired
    private Validator validator;

    @RequestMapping("/demo5")
    public void demo5(){
        Demo3 demo3 = new Demo3();
        demo3.setAge("-1");
        demo3.setHigh(100);
        demo3.setLength("ABDE");
        demo3.setList(new ArrayList<String>(){{add("111");add("222");}});
        Set<ConstraintViolation<Demo3>> violationSet=  validator.validate(demo3);
        violationSet.forEach(val->{
            log.info("violationSet:>>{}",val.getMessage());
        });
    }

    @RequestMapping("/customValidate")
    public void customValidate(){
        Demo4 demo = new Demo4();
        demo.setUserName("userName");
        Set<ConstraintViolation<Demo4>> validate = validator.validate(demo);
        for (ConstraintViolation<Demo4> dem : validate) {
            System.out.println(dem.getMessage());
        }
    }


    @RequestMapping("/demo6")
    public void demo6(){
        Demo5 demo5 = new Demo5();
        demo5.setList(new ArrayList<String>(){{add("111");add("222");add("333");}});
        Demo6 demo6 = new Demo6();
        demo6.setExtField("22");
        demo5.setDemo6(demo6);
        Set<ConstraintViolation<Demo5>> violationSet = validator.validate(demo5);
        for (ConstraintViolation<Demo5> model : violationSet) {
            System.out.println(model.getMessage());
        }
    }

    /**
     * 常用注解
     * @Null 被注释的元素必须为 null
     * @NotNull 被注释的元素必须不为 null
     * @AssertTrue 被注释的元素必须为 true
     * @AssertFalse 被注释的元素必须为 false
     * @Min(value) 被注释的元素必须是一个数字，其值必须大于等于指定的最小值
     * @Max(value) 被注释的元素必须是一个数字，其值必须小于等于指定的最大值
     * @DecimalMin(value) 被注释的元素必须是一个数字，其值必须大于等于指定的最小值
     * @DecimalMax(value) 被注释的元素必须是一个数字，其值必须小于等于指定的最大值
     * @Size(max=, min=)   被注释的元素的大小必须在指定的范围内
     * @Digits (integer,fraction)     被注释的元素必须是一个数字，其值必须在可接受的范围内
     * @Past 被注释的元素必须是一个过去的日期
     * @Future 被注释的元素必须是一个将来的日期
     * @Pattern(regex=,flag=) 被注释的元素必须符合指定的正则表达式
     * Hibernate Validator 附加的 constraint
     * @NotBlank(message =)   验证字符串非null，且长度必须大于0
     * @Email 被注释的元素必须是电子邮箱地址
     * @Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
     * @NotEmpty 被注释的字符串的必须非空
     * @Range(min=,max=,message=) 被注释的元素必须在合适的范围内
     */
}
